///import core
///commands 当输入内容超过编辑器高度时，编辑器自动增高
///commandsName  AutoHeight,autoHeightEnabled
///commandsTitle  自动增高
/**
 * @description 自动伸展
 * @author zhanyi
 */
UE.plugins["autoheight"] = function () {
    var me = this;
    //提供开关，就算加载也可以关闭
    me.autoHeightEnabled = me.options.autoHeightEnabled !== false;
    if (!me.autoHeightEnabled) {
        return;
    }

    var bakOverflow,
        lastHeight = 0,
        options = me.options,
        currentHeight,
        timer;

    function adjustHeight() {
        var me = this;
        clearTimeout(timer);
        if (isFullscreen) return;
        if (
            !me.queryCommandState ||
            (me.queryCommandState && me.queryCommandState("source") != 1)
        ) {
            timer = setTimeout(function () {
                var node = me.body.lastChild;
                while (node && node.nodeType != 1) {
                    node = node.previousSibling;
                }
                if (node && node.nodeType == 1) {
                    node.style.clear = "both";
                    currentHeight = Math.max(
                        domUtils.getXY(node).y + node.offsetHeight + 25,
                        Math.max(options.minFrameHeight, options.initialFrameHeight)
                    );
                    if (currentHeight !== lastHeight) {
                        me.iframe.parentNode.style.transition = 'width 0.3s, height 0.3s, easy-in-out';
                        if (currentHeight !== parseInt(me.iframe.parentNode.style.height)) {
                            me.iframe.parentNode.style.height = currentHeight + "px";
                        }
                        me.body.style.height = currentHeight + "px";
                        lastHeight = currentHeight;
                    }
                    domUtils.removeStyle(node, "clear");
                }
            }, 50);
        }
    }

    var isFullscreen;
    me.addListener("fullscreenchanged", function (cmd, f) {
        isFullscreen = f;
    });
    me.addListener("destroy", function () {
        domUtils.un(me.window, "scroll", fixedScrollTop);
        me.removeListener(
            "contentchange afterinserthtml keyup mouseup",
            adjustHeight
        );
    });
    me.enableAutoHeight = function () {
        var me = this;
        if (!me.autoHeightEnabled) {
            return;
        }
        var doc = me.document;
        me.autoHeightEnabled = true;
        bakOverflow = doc.body.style.overflowY;
        doc.body.style.overflowY = "hidden";
        me.addListener("contentchange afterinserthtml keyup mouseup", adjustHeight);
        //ff不给事件算得不对

        setTimeout(function () {
            adjustHeight.call(me);
        }, browser.gecko ? 100 : 0);
        me.fireEvent("autoheightchanged", me.autoHeightEnabled);
    };
    me.disableAutoHeight = function () {
        me.body.style.overflowY = bakOverflow || "";

        me.removeListener("contentchange", adjustHeight);
        me.removeListener("keyup", adjustHeight);
        me.removeListener("mouseup", adjustHeight);
        me.autoHeightEnabled = false;
        me.fireEvent("autoheightchanged", me.autoHeightEnabled);
    };

    me.on("setHeight", function () {
        me.disableAutoHeight();
    });
    me.addListener("ready", function () {
        me.enableAutoHeight();
        //trace:1764
        var timer;
        domUtils.on(
            browser.ie ? me.body : me.document,
            browser.webkit ? "dragover" : "drop",
            function () {
                clearTimeout(timer);
                timer = setTimeout(function () {
                    //trace:3681
                    adjustHeight.call(me);
                }, 100);
            }
        );
        //修复内容过多时，回到顶部，顶部内容被工具栏遮挡问题
        domUtils.on(me.window, "scroll", fixedScrollTop);
    });

    var lastScrollY;

    function fixedScrollTop() {
        if (!me.window) return;
        if (lastScrollY === null) {
            lastScrollY = me.window.scrollY;
        } else if (me.window.scrollY == 0 && lastScrollY != 0) {
            me.window.scrollTo(0, 0);
            lastScrollY = null;
        }
    }
};
